// https://leetcode.cn/problems/is-unique-lcci
class Solution {
public:
    bool isUnique(string astr) {
        // 哈希表统计次数
        // unordered_map<char,int> hash;
        // for(const auto &ch : astr) hash[ch]++;
        // for(const auto &[k,v] : hash) {
        //     if(v != 1) return false;
        // }
        // return true;

        // 用一个整数当作哈希表,用位图来判断是否重复
        // 大于26个字符,一定会重复,鸽巢原理
        if(astr.size() > 26) return false;
        int bitMap = 0;
        for(auto& ch : astr) {
            int i = ch - 'a';
            // 判断位图中是否出现过
            if(bitMap & (1 << i)) return false;
            // 添加到位图
            bitMap |= (1 << i);
        }
        return true;
    }
};
